城市数据实践:公交API数据抓取——城市公交数据获取的历史与今天
【城市数据研习社——优秀学员作品展示】
公交API数据抓取
城市公交数据获取的历史与今天
前言:本期数据实践栏目,来自城市数据研习社社员庄楚天的实践案例,学号A180。
庄楚天目前在读交通规划与管理硕士,于2016年8月报名参加了由国匠城和城市数据团共同举办的《面向规划实践的数据能力增强计划》,也是城市数据研习社苏州分社的成员,具备了城市数据综合分析能力,特此颁发认证,以资鼓励。
本栏目将持续推出城市数据研习社社员作品,并作为课程考核环节,为达到实践能力的社员,提供在线能力认证,证书网址:www.caup.net/cert 。
往期回顾:
大家好,我是庄楚天,现为一名研究生三年级在读交通规划与管理硕士。本期专题,我将为大家分享一下实操的公交API数据抓取——城市公交数据获取的历史与今天,API数据抓取据可靠消息在接下来的城市数据研习社课程中也将会讲到哦~
我在苏州大学已经学习了七年。渐渐的我发现这些年大家都在提:要搞好城市交通,先搞好城市公交系统。但是城市公交系统运行的状况怎么评价?数据怎么获取?一直是个难点。早些年我们做公交评价的时候,找公交数据主要有这几种方法:
1、根据需要找的公交线路,在百度地图上查找线路,把一个一个站点记录下来,然后在Transcad里建立公交线路;
2、根据课题或项目需要,把范围内的公交站点在百度地图上找出来,打坐标,建表,然后在Trancad里做出公交线路;
3、如果要建立一个全苏州市的公交线网,将近1w个站点,几百条公交线路,需要花费大量的人工和时间,几乎是个Mission Impossible!
Transcad做出的公交路网
作为交通规划出身的我们,对各种道路交通标准,交叉口渠化,车流量等等概念有着清晰的理解,但在当前这个数据先行的年代,掌握一定的数据获取能力,可以让我们在工作中对问题的分析更加精准,带着这样的目的,我加入了城市数据研习社,开始和各个学员碰撞思想,希望得到一些更好、更快的工作方法。
还好大数据的来临代替了许多不必要的重复人工工作。在加入城市数据研习社后,大鹏老师一直在帮大家爬取POI数据,并教我们爬取的方法。
在学习课程后,我也自己试着爬了一下百度poi,以“公交车站”为关键词,搜索了苏州所有公交站点的信息以及坐标。然后用坐标转换工具把所有的坐标转成了火星坐标,最后落在powemap上,成果如下:
公交站点powermap图
看着上面这张图,密密麻麻的公交站点,感觉头好疼,真的好疼,公交是由一个个站点串成的线路,但是这么多站点,我一个人做公交线路……好难啊……
不过一次偶然的机会,我们发现了苏州本地的一个数据企业,聚合数据里有一个苏州实时公交API,里面提供了公交(路线)详情。
网址:https://www.juhe.cn/
聚合数据API界面
这不正好解决了我的需求么!于是我开始详细查看它到底输出什么数据。
此图换成人话就是:API会给我”线路名称”、“站点名称”、“线路所有站点名称”、“通过所有站点名称”等信息,而我所需要提供的参数只有两项:输出类型和key。具体的爬取流程如下:
可行性很高,于是我用R语言写了一个小程序,真的是小程序,多小呢……15行……真的……15行…… 然后我把一次请求的数据一起输出成excel,然后就做了这么个表:
然后,我们可以骄傲的宣布,我们把苏州公交的大部分信息都撸下来了,比如起终点站,高峰发车间隔,平峰发车间隔,线路运行方向,通过所有站点名称等等……
但是每条公交线路经过的站点都团在一个单元格里,这有啥用,于是……我写了个小循环,把每个公交线路信息拆了出来,并用Vlookup函数把抓出来的poi和找到的公交线路对上了
然后落在arcgis里,并按线路设置可视化后就变成了这样:
这是苏州城内的一条公交线路,如果把所有公交线路都放进去,就可以做出公交网络啦,又快又方便!
但这个时候有人问了,这个数据我们从某些渠道也拿的到啊,要你这个有何用?
我在苏州分社成立那天的汇报中也提到了,这种静态数据不能准确的体现城运行的情况,要想知道城市运行的具体情况,还是需要动态数据,动态数据怎么来呢?
别急,咱们再看这个API的其他功能。利用之前我们得到的苏州所有公交线路的编号(就是上表中的第三列)进行编号查询:
该功能可按照线路编码查询公交车到站时间,并且是实时更新的。这就意味着理论上我们可以准确地计算出某条公交线路的发车间隔,这些公交车在道路上的运行情况等等。
通过对这些数据的分析,我们可以很快地计算出整个城市的公共交通服务水平或某一条公交线路的服务水平,能够很好的衡量整个城市公共交通系统的运行状况。
以下是线路(编码)查询的三个应用场景:
场景一:查询一条线路有多少车在同时工作。我大约早上九点五十五分左右给了API这次请求,在给我返回的数据中,它告诉我现在路上跑了8辆110路公交车,并且还有预计的到站时间。
场景二:公交推荐系统。我也试着输入一个公交站编码(以醋坊桥观前街东,编号ECV为例)给API一个请求,API给我们返回了这样的数据:
每条经过这个站点的公交线路、当前的状态都显示了出来。由此我们可以推测公交车还有几站到,到的车的车牌号。试想一下如果我们隔几分钟请求一次这个站点的数据,我们就可以了解到这个站点全天的动态数据,这样评价一个站点的公交运行状况就不用像以前一样需要调查员站在站点无聊地看着表数着车啦!
场景三:模糊查询
根据线路编码查询详细信息,我们给API传个参数11试试,然后得到了这样的结果:
从表中看出,所有线路里有11这两个数字的公交信息出来了,但是这个功能貌似有点鸡肋,我们都有苏州所有公交线路的详情了,这个功能对我们来说用处就不大了。
好了,我把这个API的功能说完了,我该说说API的工作原理了。
本文中我使用了聚合数据API的苏州实时公交功能。API是Application Programming Interface的缩写。
其工作原理就是,我们通过给API接口提出一个请求,API给我们返回一串json数据(json数据具体是啥自己去百度吧~),相当于一个网页,但是结构及其简单,json数据的特点就是相比普通网页结构上更加简单,所以我们处理起来也非常简单。
绝大多数主流的编程语言都可以直接把json数据转换成表,所以json数据对有一点点编程能力的人都很容易把握 。
API在国内有很多互联网公司提供了,比如百度API,高德API,聚合API等等。其他API接口可以在国匠城网站:http://dashuju123.com/上找到~大家可以自己去看看。
再说说大家可能会问的问题:
1. 我不会编程怎么办?
不会编程问题也不大,我相信大鹏老师会带着大家玩这类数据,到时候写个小插件供大家使用就好了。
2. 学会这些花了多久?
我从开始写代码到熟练使用API,学R语言编程大概3个月,看了几个别人用R语言写的爬虫之后有一天突然想通了API的使用方法,试着写了一个,其他API的原理和这个是一样一样的。
3. 还有什么好玩的API吗?
有啊,百度地图API,可以抓poi(但是需要一些小技巧,有几个小坑),聚合数据API里还有苏州停车场数据啊,公共自行车数据啊等等,有兴趣的可以多找一些API看一看。
写在最后:
我一直有一个观点,如果要了解这个城市的运行状况,就一定需要动态数据,以前在做交通工程类的设计或者项目的时候,我们做的最多的事情就是找好多好多人,在每个交叉口数车,在每个公交站数人,甚至在每个公交车上数人,做调查问卷等等。
进入大数据时代之后,很多数据可以通过其他方式获得,比如这个实时公交功能,我们可以通过这个功能清楚的了解这个城市公交运行状况,如果有能力,我们甚至可以做出一张动态的公交运行图,底图是地图,上面有很多公交车在跑,我们可以知道这些公交车的车牌号,运行情况等等,再深入一些甚至就可以做出产品了。
API在程序员界不是一个陌生的词汇,但是在规划界,大家对API的认识也许还都停在百度API提供的poi功能上,但是很多好的API被大家忽略了,通过API得到这个城市的动态数据,我们才能更好地了解这个城市的运行情况。当我们彻底理解这个城市的运行状况,也许规划会进入一个新的纪元吧。
附上我在城市数据研习社苏州分社上的演讲视频,主题是:
通过API抓数据——把握城市脉动
https://v.qq.com/txp/iframe/player.html?vid=j0340e1uisq&width=500&height=375&auto=0
有合作或者任何问题联系我哦~124860450@qq.com
[*] 城市数据研习社是国匠城、城市数据团共同举办的持续性学习组织,社员将享受到持续更新的数据课程,免费使用的数据插件,以及社群内的交流答疑。
目前,城市数据研习社开启了“千人计划”,希望能够从规划师中首先招募1000人,作为社群的中坚力量,助推规划师个人发展。
城市数据研习社咨询群:413942566
长按识别二维码,腾讯课堂
报名加入城市数据研习社
社员机构列表